//
//  HFRow.h
//  ThridPackage
//
//  Created by 韩艳锋 on 2019/7/23.
//  Copyright © 2019 韩艳锋. All rights reserved.
//

#import <UIKit/UIKit.h>


NS_ASSUME_NONNULL_BEGIN

@class HFRow;
@protocol HFRowDelegate <NSObject>

@optional
- (void)actionFromCellRow:(HFRow *)viewData tag:(NSInteger)tag value:(id)value;

@end

@protocol HFCellUpdatable <NSObject>

@optional
- (void)updateViewData:(HFRow *)viewData;

@end

/**
 Description
 本类功能
 1、获取对应的Cell
 2、为Cell传递数据
 3、桥接Cell上的事件
 4、作为Cell需要的数据模型的容器
 */
@interface HFRow<Iterface, Other> : NSObject

- (instancetype)initWithCellClass:(Class)cellClass interface:(Iterface _Nullable)interface;

/**
 创建一行

 @param cellClass 对应Cell的类型
 @param interface cell展示数据需要的模型
 @param other 对应具体业
 @return 返回本类
 */
- (instancetype)initWithCellClass:(Class)cellClass interface:(Iterface _Nullable)interface other:(Other _Nullable)other;

/// 点击cell时是否有回调 默认为YES
@property (assign, nonatomic) BOOL hasCellTipBack;

@property(nonatomic, strong, readonly) Iterface interface;

@property(nonatomic, strong, readonly) Other other;

@property(nonatomic, weak) id <HFRowDelegate> delegate;

/// 获取cell并用model为cell传值
- (UITableViewCell<HFCellUpdatable>* _Nonnull)cellWithTableView:(UITableView*)tableView;
- (UICollectionViewCell<HFCellUpdatable>* _Nonnull)cellWithCollectionView:(UICollectionView*)collectionView indexPath:(NSIndexPath*)indexPath;

/**
 cell内部发生事件调用本方法

 @param tag 区分事件的类型
 @param value 传递一个指定的值。例如UISlider的value
 */
- (void)cellActionWith:(NSInteger)tag value:(id _Nullable)value;

@property (weak, nonatomic) UITableViewCell<HFCellUpdatable>*cell;

- (void)refreshCell;
@end

NS_ASSUME_NONNULL_END
